import axios from 'axios'

axios.create({
  baseURL: process.env.VUE_APP_API_BASE, // 域名配置，可添加变量配置文件定义
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
  },
  withCredentials: true, // 跨域请求时是否需要使用凭证
  timeout: 30000 // 请求超时时间
})

// 错误处理函数
function errorHandle(response) {
  switch (response.status) {
    case 400:
      // 处理错误信息，例如抛出错误信息提示，或者跳转页面等处理方式。
      // return Promise.resolve(error)
      break
    case 401:
      //
      break
    case 404:
      //
      break
    // ...
    default:
      throw new Error('未知错误')
  }
}
// 成功处理函数

function successHandle(response) {
  switch (response.status) {
    case 200:
      //
      return response.data
    // ....
    default:
      return
  }
}
// 请求拦截器
axios.interceptors.request.use((config) => {
  return config
}, (error) => {
  // 错误抛到业务代码
  error.data = {}
  error.data.msg = '服务器异常'
  return Promise.resolve(error)
}
)

axios.interceptors.response.use((response) => {
  successHandle(response)
}, (err) => {
  errorHandle(err)
}
)

// 基地址
const base = '' // 接口代理地址参见：config/index.js中的proxyTable配置

// 通用方法
export const POST = (url, params) => {
  return axios.post(`${base}${url}`, params).then(res => res.data)
}

export const GET = (url, params) => {
  return axios.get(`${base}${url}`, { params: params }).then(res => res.data)
}

export const PUT = (url, params) => {
  return axios.put(`${base}${url}`, params).then(res => res.data)
}

export const DELETE = (url, params) => {
  return axios.delete(`${base}${url}`, { data: params }).then(res => res.data)
}

export const PATCH = (url, params) => {
  return axios.patch(`${base}${url}`, params).then(res => res.data)
}

